package com.bestcem.xm.om.controller.param;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

/**
 * 订单列表查询入参
 *
 * @author zq.ding <zq.ding@idiaoyan.com>
 * @version v1.0
 * @date 2022/3/30 10:02
 */
@NoArgsConstructor
@Data
@AllArgsConstructor
public class ListOrderParam {

    /**
     * 是否分页查询 如果是true，是分页查询。如果是false，查询全部
     */
    @JsonProperty("paging")
    private Boolean paging;

    /**
     * 页数
     */
    @JsonProperty("page")
    private Integer page;

    /**
     * 每页大小
     */
    @JsonProperty("size")
    private Integer rowsPerPage;

    /**
     * 订单状态 1-已创建 2-已完成 3-已取消 4-已支付
     */
    @JsonProperty("status")
    private Integer status;

    /**
     * 支付方式 1-微信支付 2-支付宝支付 3-线下支付 4-银联支付
     */
    @JsonProperty("pay_method")
    private Integer payMethod;

    /**
     * 订单提交日期区间
     */
    @JsonProperty("submit_period")
    private BaseDateParam submitPeriod;

    /**
     * 支付完成日期区间
     */
    @JsonProperty("pay_period")
    private BaseDateParam payPeriod;

    /**
     * 套餐id
     */
    @JsonProperty("packageID")
    private String packageId;
    /**
     * 订单详细描述信息，同时用于在交易明细页面显示
     */
    @JsonProperty("description")
    private String description;

    /**
     * 订单号
     */
    @JsonProperty("order_no")
    private String orderNo;

    /**
     * 付款操作执行人名称
     */
    @JsonProperty("payer_user_name")
    private String payerUserName;

    /**
     * 支付企业代码 当支付主体为企业时必填
     */
    @JsonProperty("payer_org_code")
    private String payerOrgCode;

    /**
     * 支付企业名称 当支付主体为企业时必填
     */
    @JsonProperty("payer_org_name")
    private String payerOrgName;

    /**
     * 支付帐号
     */
    @JsonProperty("payer_account_no")
    private String payerAccountNo;

    /**
     * 支付单号
     */
    @JsonProperty("out_order_no")
    private String outOrderNo;

    /**
     * 用户是否已经确认支付
     */
    @JsonProperty("pay_confirmed")
    private Boolean payConfirmed;


    /**
     * 校验初始化参数
     */
    public void checkPageAndSize(Integer page, Integer size) {
        if (page == null || page < 1) {
            this.page = 1;
        }
        if (size == null || size < 1) {
            this.rowsPerPage = 10;
        }
        if (size != null && size > 1000) {
            this.rowsPerPage = 1000;
        }
    }

    @Data
    public static class BaseDateParam {
        /**
         * 开始时间
         */
        @JsonProperty("start_time")
        @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "GMT+8")
        private Date startTime;

        /**
         * 结束时间
         */
        @JsonProperty("end_time")
        @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "GMT+8")
        private Date endTime;
    }
}
